package com.cloudeasy.server.util;

import com.cloudeasy.api.vo.user.RoleVO;
import com.cloudeasy.api.vo.oauth.OAuthUserEnableRolesVO;
import com.cloudeasy.api.vo.oauth.OAuthUserRoleVO;
import com.cloudeasy.server.po.Role;
import com.cloudeasy.server.po.User;
import com.cloudeasy.server.po.UserRole;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * OAuth工具类
 */
public class OAuthUtil {
    /**
     * 构建
     *
     * @param user      {@link User}
     * @param roles     {@link List<Role>}
     * @param userRoles {@link List<UserRole>}
     * @return {@link OAuthUserEnableRolesVO}
     */
    public static OAuthUserEnableRolesVO compose(User user, List<Role> roles, List<UserRole> userRoles) {
        OAuthUserEnableRolesVO oAuthUserEnableRolesVO = new OAuthUserEnableRolesVO();
        // 拷贝用户信息
        oAuthUserEnableRolesVO.setUserId(user.getId()).setAccount(user.getAccount());
        if (roles == null || userRoles == null) {
            return oAuthUserEnableRolesVO;
        }
        // 转换用户角色信息为roleId为key的Map
        Map<String, UserRole> userRoleMap = userRoles.stream().collect(Collectors.toMap(UserRole::getRoleId, userRole -> userRole, (o, o2) -> o));

        List<OAuthUserRoleVO> oAuthUserRoleVOS = new ArrayList<>();
        roles.forEach(role -> {
            // 拷贝角色信息
            RoleVO roleVO = new RoleVO();
            BeanUtils.copyProperties(role, roleVO);

            OAuthUserRoleVO oAuthUserRoleVO = new OAuthUserRoleVO();
            UserRole userRole = userRoleMap.get(role.getId());
            BeanUtils.copyProperties(userRole, oAuthUserRoleVO);
            oAuthUserRoleVO.setRole(roleVO);

            oAuthUserRoleVOS.add(oAuthUserRoleVO);
        });
        oAuthUserEnableRolesVO.setUserRoles(oAuthUserRoleVOS);
        return oAuthUserEnableRolesVO;
    }
}
